package com.ruoyi.merchant.serviceType.service.impl;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.merchant.serviceType.mapper.ServiceTypeMapper;
import com.ruoyi.merchant.serviceType.domain.ServiceType;
import com.ruoyi.merchant.serviceType.service.IServiceTypeService;
import com.ruoyi.common.core.exception.ServiceException;

/**
 * 服务类别Service业务层处理
 * 
 * @author zzr
 * @date 2025-09-14
 */
@Service
public class ServiceTypeServiceImpl implements IServiceTypeService 
{
    @Autowired
    private ServiceTypeMapper serviceTypeMapper;

    /**
     * 查询服务类别
     * 
     * @param id 服务类别主键
     * @return 服务类别
     */
    @Override
    public ServiceType selectServiceTypeById(Long id)
    {
        return serviceTypeMapper.selectServiceTypeById(id);
    }
    /**
     * 实现全查服务类别（不分页）
     */
    @Override
    public List<ServiceType> selectAllServiceType(ServiceType serviceType)
    {
        // 调用Mapper全查方法，传递筛选条件
        return serviceTypeMapper.selectAllServiceType(serviceType);
    }
    @Override
    public List<ServiceType> selectServiceTypesByShopId(Long shopId) {
        return serviceTypeMapper.selectServiceTypesByShopId(shopId);
    }
    /**
     * 查询服务类别列表
     * 
     * @param serviceType 服务类别
     * @return 服务类别
     */
    @Override
    public List<ServiceType> selectServiceTypeList(ServiceType serviceType)
    {
        return serviceTypeMapper.selectServiceTypeList(serviceType);
    }

    /**
     * 新增服务类别
     * 
     * @param serviceType 服务类别
     * @return 结果
     */
    @Override
    public int insertServiceType(ServiceType serviceType)
    {
        return serviceTypeMapper.insertServiceType(serviceType);
    }

    /**
     * 修改服务类别
     * 
     * @param serviceType 服务类别
     * @return 结果
     */
    @Override
    public int updateServiceType(ServiceType serviceType)
    {
        return serviceTypeMapper.updateServiceType(serviceType);
    }

    /**
     * 检查服务类别是否被引用
     * @param id 服务类别ID
     * @return true-被引用，false-未被引用
     */
    @Override
    public boolean hasReferences(Long id) {
        return serviceTypeMapper.checkServiceTypeHasReferences(id) > 0;
    }

    /**
     * 批量检查服务类别是否被引用
     * @param ids 服务类别ID数组
     * @return true-存在引用，false-无引用
     */
    @Override
    public boolean hasReferencesByIds(Long[] ids) {
        return serviceTypeMapper.checkServiceTypeHasReferencesByIds(ids) > 0;
    }

    /**
     * 批量删除服务类别
     * 
     * @param ids 需要删除的服务类别主键
     * @return 结果
     */
    @Override
    public int deleteServiceTypeByIds(Long[] ids)
    {
        // 先检查是否被引用
        if (hasReferencesByIds(ids)) {
            throw new ServiceException("选中的服务类别中存在关联数据，无法删除");
        }
        return serviceTypeMapper.deleteServiceTypeByIds(ids);
    }

    /**
     * 删除服务类别信息
     * 
     * @param id 服务类别主键
     * @return 结果
     */
    @Override
    public int deleteServiceTypeById(Long id)
    {
        // 先检查是否被引用
        if (hasReferences(id)) {
            throw new ServiceException("该服务类别下存在服务详情，无法删除");
        }
        return serviceTypeMapper.deleteServiceTypeById(id);
    }
}
